package com.ly.sms.utils;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.util.OptionHelper;
import org.slf4j.LoggerFactory;

/**
 * 自定义、动态生成appender 参考： https://blog.csdn.net/weixin_42258128/article/details/81942796
 *
 * @author liyong
 * @version 2020年2月14日
 */
public class BatjobLoggerAppender {

    /**
     * 通过传入的名字，动态设置appender
     *
     * @param path 文件保存父路径 example: /app/logs/downLoadFiles/
     * @param name 文件名 example:批量设置
     * @return
     */
    public FileAppender getAppender(String path, String name) {
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();

        // 这里是可以用来设置appender的，在xml配置文件里面，是这种形式：
        FileAppender appender = new FileAppender();

        // 设置上下文，每个logger都关联到logger上下文，默认上下文名称为default。
        // 但可以使用<contextName>设置成其他名字，用于区分不同应用程序的记录。一旦设置，不能修改。
        appender.setContext(context);
        // appender的name属性
        appender.setName("FILE-" + name);

        // 设置文件名
        appender.setFile(OptionHelper.substVars(path + name + ".log", context));

        appender.setAppend(true);

        appender.setPrudent(false);

        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        // 设置上下文，每个logger都关联到logger上下文，默认上下文名称为default。
        // 但可以使用<contextName>设置成其他名字，用于区分不同应用程序的记录。一旦设置，不能修改。
        encoder.setContext(context);
        // 设置格式
        encoder.setPattern("%d{HH:mm:ss.SSS} %msg%n");
        encoder.start();

        // 加入下面两个节点
        appender.setEncoder(encoder);
        appender.start();
        return appender;
    }

}
